分享好友 技术首页 技术分类 切换频道

linux网卡驱动程序的编译与安装

2020-07-18 06:5590
一般来说,目前新版的 linux 预设可以支持的网络卡芯片组数量已经很完备了,很多网络卡芯片都已经被支持,
例如rlt 8139 芯片 ( realtek 8139 ) 的网络卡所以使用者可以很轻易的设定好他们的网络卡。
不过,如果万一不幸核心没有支持该网络卡的话,那么可以透过重新编译核心或者编译网络卡驱动模块 ( modules ),
并且加载该模块,今天就是这么巧,碰到一个d-link 的dfe-530tx,没法,只有手动安装网络卡驱动程序了.
可以用命令# dmesg | grep eth
来查看系统启动信息,显示出 eth0 或者 eth1 的信息,如果eth1没找到正确的信息,那就表示 linux 无法找到该硬件,
eth0是8139的,已经显示正常,例如:
[root@kindgeorge root]# dmesg | grep eth
eth0: realtek rtl8139 fast ethernet at 0xf0160000, 00:0a:a6:30:0d:0e, irq 11
eth0:  identified 8139 chip type "rtl-8139c"
eth0: setting 10mbps full-duplex based on auto-negotiated partner ability 4061.

一. 查看自己系统的内核版本.
[root@kindgeorge root]# uname -r
2.4.18-3 
我这里是redhat7.3的,内核2.4.18-3
一般来说,这个内核驱动程序的模块会放在 /lib/modules/2.4.18-3/kernel/drivers/net
二.确定系统是否已经安装下面包
1.由于编译需要用到内核的源代码包和编译程序gcc.所以如果没有的话,要先装.
   查看: 
[root@kindgeorge root]# rpm -qa|grep kernel
kernel-2.4.18-3
kernel-source-2.4.18-3
[root@kindgeorge root]# rpm -qa|grep gcc   (gcc是编译用)
gcc-2.96-110
gcc-g77-2.96-110
gcc-c++-2.96-110
一般装了内核源包的话,都会在出现/usr/src/linux-2.4,同路径下会有linux-2.4.18-3的文件实际目录.
2.如果没有的话,就用原来安装盘上的文件安装,会去下载个相同内核源包安装吧
  rpm -ivh kernel-source-2.4.18-3.i386.rpm
  ......
三. 取得驱动程序和编译
1. 可以重厂家提供的光盘提供,把光盘上的linux目录下的dlkfet-4.24.tar.gz 拷贝过来用.
2. 从网上下载网络卡驱动程序,一般厂家的都提供下载程序的.
例如:
  上有下载.
 [root@kindgeorge root]# cp dlkfet-4.24.tar.gz /usr/src
 [root@kindgeorge root]# cd /usr/src/
[root@kindgeorge src]# tar -zxvf dlkfet-4.24.tar.gz
dlkfet-4.24/
dlkfet-4.24/rhine_main.c
dlkfet-4.24/makefile
dlkfet-4.24/vmns_drv.h
dlkfet-4.24/rhine.h
dlkfet-4.24/.depend.mak
dlkfet-4.24/rhine_vmns.c
dlkfet-4.24/rhine_proc.h
dlkfet-4.24/rhine_proc.c
dlkfet-4.24/rhine_vmns.h
dlkfet-4.24/kcompat.h
dlkfet-4.24/rhine_cfg.h
dlkfet-4.24/.depend
dlkfet-4.24/rhine_wol.c
dlkfet-4.24/rhine_wol.h
dlkfet-4.24/linux.txt
3.请留意一开始是没有.o文件的. 我们编译前可以看看目录的linux.txt,是一个包含介绍安装说明.在进入目录后,执行make进行编译.
[root@kindgeorge src]# cd dlkfet-4.24
[root@kindgeorge dlkfet-4.24]# make
[root@kindgeorge dlkfet-4.24]# ll   (编译后查看一下)
total 320
-rw-r--r--    1 root     root         7473 jan 15  2003 kcompat.h
-rw-r--r--    1 root     root        11491 jan 20  2003 linux.txt
-rw-r--r--    1 root     root         5219 dec 10  2002 makefile
-rw-r--r--    1 root     root         1818 jan 16  2003 rhine_cfg.h
-rw-r--r--    1 root     root        48715 may 24 18:31 rhinefet.o
-rw-r--r--    1 root     root        42044 jan 15  2003 rhine.h
-rw-r--r--    1 root     root        78996 jan 16  2003 rhine_main.c
-rw-r--r--    1 root     root        32760 may 24 18:31 rhine_main.o
-rw-r--r--    1 root     root        14980 jan 15  2003 rhine_proc.c
-rw-r--r--    1 root     root         1672 jan 15  2003 rhine_proc.h
-rw-r--r--    1 root     root        12336 may 24 18:31 rhine_proc.o
-rw-r--r--    1 root     root         9172 jan 15  2003 rhine_vmns.c
-rw-r--r--    1 root     root         1106 jan 15  2003 rhine_vmns.h
-rw-r--r--    1 root     root         3792 may 24 18:31 rhine_vmns.o
-rw-r--r--    1 root     root         7536 jan 15  2003 rhine_wol.c
-rw-r--r--    1 root     root         1529 jan 15  2003 rhine_wol.h
-rw-r--r--    1 root     root         3488 may 24 18:31 rhine_wol.o
-rw-r--r--    1 root     root         6824 jan 15  2003 vmns_drv.h

4.经过编译后,会编译出一个rhinefet.o 文件,这个就是驱动模块,我们把它拷贝到相应地方:
[root@kindgeorge dlkfet-4.24]#cp rhinefet.o  /lib/modules/2.4.18-3/kernel/drivers/net
[root@kindgeorge dlkfet-4.24]# depmod -a
5.测试
(1)可以用命令modprobe rhinefet 或  insmod rhinefet.o  加载.如果没出错信息说明ok.
(2) 用命令lsmod 可以看看是否已经加载了.
[root@kindgeorge dlkfet-4.24]# lsmod
module                  size  used by    not tainted
rhinefet               38752   1
8139too                16448   1
mii                     2408   0  [8139too]
这样,看到rhinefet模块已经加载了,基本上,这样就证明已经编译成功.

6. 让它开机时加载
[root@kindgeorge dlkfet-4.24]# vi /etc/modules.conf
在后面加上一行:  alias eth1 rhinefet
7. 配置一下网络
[root@kindgeorge dlkfet-4.24]# vi /etc/sysconfig/network-sc-ripts/ifcfg-eth1
   
device=eth1
bootproto=static
ipaddr=192.168.4.202
netmask=255.255.255.0
network=192.168.4.0
gateway=192.168.4.250
broadcast=192.168.4.255
onboot=yes
8.启动网卡,然后用ifconfig查看,
 ifup eth1
[root@kindgeorge dlkfet-4.24]# ifconfig
eth0      link encap:ethernet  hwaddr 00:0a:e6:30:0d:0e 
          inet addr:211.239.218.153  bcast:211.239.218.255  mask:255.255.255.0
          up broadcast running multicast  mtu:1500  metric:1
          rx packets:3780479 errors:0 dr-opped:0 overruns:0 frame:0
          tx packets:3833860 errors:0 dr-opped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          rx bytes:1118112324 (1066.3 mb)  tx bytes:1111887387 (1060.3 mb)
          interrupt:11

eth1      link encap:ethernet  hwaddr 00:0f:3d:82:ec:1d 
          inet addr:192.168.4.202  bcast:192.168.4.255  mask:255.255.255.0
          up broadcast running multicast  mtu:1500  metric:1
          rx packets:749312 errors:0 dr-opped:0 overruns:0 frame:0
          tx packets:976174 errors:0 dr-opped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          rx bytes:43695059 (41.6 mb)  tx bytes:1472142037 (1403.9 mb)
          interrupt:5 base address:0xe000

9.重新启动机器,可以自动加载和使用了.大功告成.

五. 按照安装说明的方法自动编译安装. 
     在 "三.3" 中我们用make 编译,然后进行手动的拷贝. 实际上在linux.txt中的安装说明提到用make install .
那我们来看看这种方法系统都做了什么吧.
[root@firewall1 dlkfet-4.24]# make install
gcc-wall -dlinux -d__kernel__ -dmodule -dexport_symtab -d__no_version__-o2 -pipe -i/lib/modules/2.4.18-3/build/include -i. -wstrict-prototypes-fomit-frame-pointer -dmodversions -include/lib/modules/2.4.18-3/build/include/linux/modversions.h -dvmns   -c -orhine_main.o rhine_main.c
gcc -wall -dlinux -d__kernel__ -dmodule-dexport_symtab -d__no_version__ -o2 -pipe-i/lib/modules/2.4.18-3/build/include -i. -wstrict-prototypes-fomit-frame-pointer -dmodversions -include/lib/modules/2.4.18-3/build/include/linux/modversions.h -dvmns   -c -orhine_proc.o rhine_proc.c
gcc -wall -dlinux -d__kernel__ -dmodule-dexport_symtab -d__no_version__ -o2 -pipe-i/lib/modules/2.4.18-3/build/include -i. -wstrict-prototypes-fomit-frame-pointer -dmodversions -include/lib/modules/2.4.18-3/build/include/linux/modversions.h -dvmns   -c -orhine_wol.o rhine_wol.c
gcc -wall -dlinux -d__kernel__ -dmodule-dexport_symtab -d__no_version__ -o2 -pipe-i/lib/modules/2.4.18-3/build/include -i. -wstrict-prototypes-fomit-frame-pointer -dmodversions -include/lib/modules/2.4.18-3/build/include/linux/modversions.h -dvmns   -c -orhine_vmns.o rhine_vmns.c


**************************************************
build options:
   version    2.4.18-3
   smp             disabled
   vmns            enabled
***************************************************
mkdir -p /lib/modules/2.4.18-3/kernel/drivers/net
install -m 644 -o root rhinefet.o /lib/modules/2.4.18-3/kernel/drivers/net
*****  move official driver via-rhine.o to via-rhine.o.backup
mv /lib/modules/2.4.18-3/kernel/drivers/net/via-rhine.o /lib/modules/2.4.18-3/kernel/drivers/net/via-rhine.o.backup

/sbin/depmod -a || true

按照上面的结果显示是这样的一个过程:
(1)系统把.c等文件编译成相应的.o文件.
(2)然后显示系统是否支持smp和vmns,然后把相应的.o模块文件拷贝到系统应该的地方.
(3)并且把相同芯片的程序过时的via-rhine.o改为备份文件.让系统用新的rhinefet.o
(4)zui后执行/sbin/depmod -a 更新模块库配置. 看来这个也是个智能的安装方法.
六. 用其他方法驱动.
    由于市面上很多的各种各样的板卡,有有杂牌,多不胜数.当我们拿到一块卡,但一下子没找到它本身提供的源程序,不能编译,怎么办呢?
    所以当你有一块网卡不能用,在找linux的driver之前一定搞清楚这个网卡用的什么芯片,跟谁兼容,比如3c509,ne2000,etherexpress等等.
   这样的型号一般都在网卡上zui大的一快芯片上印着.如果芯片型号相同,那么它们其中一些是可以通用的.我们可以尝试一下系统上已经安装了的驱动是否可行了.进入驱动目录/lib/modules/(内核版本)/kernel/drivers/net  即可发现已经有很多模块了, 用命令insmod相应芯片模块名字 , 如果不成功会报错,如果正确则不显示错误信息,然后再进行上面的"三.5-9"步骤进行测试.
如果不行,再老老实实的找源程序吧.

免责声明:矿库网文章内容来源于网络,为了传递信息,我们转载部分内容,尊重原作者的版权。所有转载文章仅用于学习和交流之目的,并非商业用途。如有侵权,请及时联系我们删除。感谢您的理解与支持。

点赞 0
举报
收藏 0
评论 0
分享 0
永磁驱动模块的原理和技术参数
智能永磁驱动模块是与永磁开关配套的设备。内置直流开关电源和分合闸独立储能电容,内置ARM芯片;可通过计算机的RS232接口,对永磁驱动模块进行分合闸的脉宽时间任意设置,合闸脉宽进行调制等;可以对单线圈或双线圈进行分合闸操作。智能

0评论2020-08-10806

九江启动决战决胜排污许可100天
省九江市2020年推行实施排污许可管理行业发证登记一县一策措施,采用模块化管理、个性化定制、精准化帮扶等方式,绘制一张蓝图挂图作战,启动决战决胜排污许可100天,为更加高质高效推进2020年排污许可全覆盖工作提供重要支撑。每天上班

0评论2020-08-03351

常见IGBT模块失效原因
对于刚接触IGBT模块的人来说,IGBT模块失效找不到原因是一件痛苦的事情,究竟哪些是其失效的常见的原因呢,我大致总结了一下,分析出了六大主要原因,下面逐一说明。 一、过温(即过电流,过负载) 主要表现在散热设计不完善,死区时间

0评论2020-07-20659

变频器使用及保养经验总结 copy
在维修大量变频器之后,发现很多人在变频器使用过程中存有不少问题,与大家一起探讨分析一下!1)变频器品牌的选定:不要只看价格,有的变频器价格低,但质量、性能极差!其偷工减料、寿命短、配件少、难维修,如果要换整个新的电路板则

0评论2020-07-2064

C200H-CPU01 C200H-CPU02 C200H-CPU03库存原装现货
武汉锦博机电设备有限公司::何武汉锦博机电设备有限公司长期特价供应: 公司专业经销日本OMRON欧姆龙,优势产品型号有CQM1 、C200H 、C200HG 、C500 、CJ1W 、CJ1G 系列模块,库存充足。欧姆龙PLC:OMRONCQM1~CQM1H系列PLC:主机(CPU)

0评论2020-07-20167

舞台机械设备集中控制方案
易控科技舞台机械设备集中控制系统主要针对舞台电动屏幕、电动窗帘、电动吊杆、灯光开关等设备的集中控制,系统采用5.7英寸无线真彩触摸屏为人机界面,用户可以定义各种风格的控制界面,结合RFGW收发器可以实现半径内的舞台远程无线遥控

0评论2020-07-20289

湖南防雷,湖南防雷公司,湖南防雷产品,湖南防雷工程
湖南防雷,湖南防雷公司,湖南防雷产品,湖南防雷工程湖南防雷,湖南防雷公司,湖南防雷产品,湖南防雷工程,雷科星湖南防雷分公司 中国通过检测产品zui多的公司;  中国发展zui快,成长zui迅速的防雷产品厂家;  长沙雷立行电子科技有

0评论2020-07-20345

PLC维修保养
一、保养规程、设备定期测试、调整规定(1)每半年或季度检查PLC柜中接线端子的连接情况,若发现松动的地方及时重新坚固连接;(2)对柜中给主机供电的电源每月重新测量工作电压;二、设备定期清扫的规定(1)每六个月或季度对PLC进行清

0评论2020-07-20661

西门子840d系统与电脑连接问题和技巧
电脑与数控机床加工程序的西门子840d系统与电脑连接问题_FEITIANJIEAE86的空间传输及操作-程序摘要:近年来,大连机车车辆有限公司先后从日本、德国、美国、台湾、奥地利、等国陆续引进数控加工中心和数控车床数十台。以前,数控机床加工

0评论2020-07-20431